# Git 全局设置:
git config --global user.name "steveouyang"
git config --global user.email "284577461@qq.com"

# 创建 git 仓库:
cd repo_2204_2

# 将当前文件夹初始化为一个本地仓库
git init 

# 已有仓库?
cd repo_2204
git remote add origin https://gitee.com/steveouyang/repo_2204.git
git push -u origin "master"

# 克隆项目到本地
git clone https://gitee.com/steveouyang/repo_2204.git

# 进入工程目录
cd repo_2204

# 将当前工作区中的全部内容加入暂存区（让所有文件版本受控）
git add .
# git add index.html

# 将暂存区中的内容提交到本地仓库（每次提交会形成一个版本快照=将来可以吃后悔药）
git commit -m "首次提交"

# 将本地仓库中的master分支推送到远程
# 如果远程仓库有未同步的更新 则必须先pull
git push -u origin master

# 查看本地仓库状态
git status

# 将远程的更新拉去到工作区
# 警告：会与当前工作区内容做分支合并，务必要在pull之前将该提交的内容提交
git pull

# 推送远程
git push -u origin master

# 查看历史记录（按q退出）
git log

# 硬回退N个版本
git reset --hard ^
git reset --hard ^^

# 硬回退到指定版本
git reset --hard 892c7a239

# 撤销指定版本的操作（将其内容与当前分支做合并）
git revert 07020ba032

# 分支操作
git branch
git checkout -b feat-login
git push -u origin feat-login

# 合并分支
# 创建开发分支（用于合并所有功能分支）
git checkout -b dev

# 同步远程仓库的所有内容（包含所有远程分支）
git pull

# 切换到指定分支
git checkout feat-login

# 基于feat-login分支创建副本分支feat-login-cp
git checkout -b feat-login-cp

# 让当前分支去合并dev分支的内容
# 如果产生冲突，冲突只在当前分支，并不影响feat-login）也不影响dev分支
# 如果有冲突解决一下 完成过后重新git add + git commit
git merge dev

# 切换回dev分支
git checkout dev

# 合并【与dev分支没有冲突的feat-login-cp分支】
git merge feat-login-cp
git merge origin/dev

# 可以选择删除临时分支
git branch -D feat-login-cp

# 产生冲突（合并/兼并其它分支时可能发生冲突）
# 解决冲突三步骤：
# 1.修改代码，统一意见
# 2.删除冲突标记
# 3.再次提交
 
# git stash
# 将未提交代码打包暂存到【缓存栈】
git stash

# 弹出【缓存栈】顶部的的代码包
git stash pop

# 罗列【缓存栈】中的所有代码包
git stash list

# 清空【缓存栈】
git stash clear

# 将远程仓库中的所有信息（分支+快照/提交记录）同步到本地仓库
# 但不会将远程的默认分支的HEAD快照合并到工作区
git fetch

# 将当前快照打标签为honeybee
git tag honeybee

# 罗列所有标签
git tag

# 将本地标签推送远程仓库
git push --tags

# git pull VS git fetch
# git pull = 远程仓库的默认分支的HEAD版本合并到当前工作区（同时远程仓库中的信息也同步到了本地仓库）
# git fetch = 将远程仓库中的信息同步到本地仓库（工作区无变化）
# git pull = git fetch + git merge origin/master（或其它默认分支）

# git reset VS git revert
# git reset --hard <trump-hash-id> 
# 硬回滚到川普时代 拜登快照湮灭

# git revert <trump-hash-id> 
# 撤销川普（不考虑冲突的话=回滚到奥巴马时代）
# 所有历史记录/快照完整保留 （相当于把奥巴马的快照拷贝了一份到历史记录的最前面）
# git revert 更被推荐

# git merge VS git rebase
# git merge xxx = 兼并别的分支（吃它到自己肚子里） 当前分支没有xxx的历史记录
# git rebase xxx = 搬取xxx分支的所有快照到当前分支的最前面